ADO.NET Een DAL klasse maken voor een entiteit
We volgen hier de filosofie van het Entity Framework en maken voor elke entiteit een aparte DAL klasse. Het is geen goed idee om een DAL klasse voor meerdere entiteiten te maken. Wel is het zo dat in een DAL voor een bepaalde entiteit eventueel andere entiteiten aangesproken kunnen worden als er foreign keys in de desbetreffende entiteit aanwezig zijn. Voor de entiteit
Person
bijvoorbeeld, zal de DAL de waarde van de Name
kolom van het land van de leverancier opzoeken in de Country
entiteit.Probleem
De DAL klasse moet een verbinding kunnen maken met de database. Het Connection
object heeft daarvoor een connectiestring nodig. Vóór .NET Core was de beste plaats om een connectiestring te bewaren het Web.Config bestand voor Web applicaties of het App.Config bestand voor Windows applicaties. .NET Core beschikt over een andere configuratie API die we hier ook zullen gebruiken.
Je vindt uitleg over de nieuwe configuratie API op de pagina De .NET Core configuratie API.
Om het gebruik van ADO.NET te leren maken we een Console app en zetten we de connectiestring in het appsettings.json bestand.
Design
Oplossing
- Voorbereiding
- Je hebt de DDL voor
EventCategory
uitgevoerd (zie Fric-frac MySQL Data Definition Language) . - Je hebt de stored procedures voor de entiteit
EventCategory
gemaakt (zie Fric-frac MySQL DML EventCategory). - Je hebt de BLL gemaakt voor de
EventCategory
entiteit (BLL EventCategory).
- Je hebt de DDL voor
- Open je project in Visual Studio. In het voorbeeld is dat het adodotnet. project.
- Voeg de elementen voor de connectie string toe in het appsettings.json (staat in de root van je project) bestand:
{ "connection": { "server": "164.132.231.13", "userid": "docent1", "password": "UKSSL14H", "port": "3306", "database": "docent1", "SslMode" : "none" } }
- In de map met de naam Bll staat EventCategory.cs.
- Maak in de root van het project een nieuwe map met de naam Dal:
- Plaats in de Dal map de DAL Interface, zie hiervoor Een DAL interface.
- De DAL klasse haalt de connectie op uit het appsettings.json bestand. Daarvoor heb je de
Microsoft.Extensions.Configuration
namespace nodig. In Console applicaties wordt niet die automatisch geladen en moet je zelf een referenctie toevoegen. Op de De .NET Core configuratie API pagina lees je hoe je dat doet. - In de Dal map voeg je een klassenbestand toe met de naam EventCategory.cs. Je zou er de naam EventCategoryDal aan kunnen geven om een onderscheid te maken met de bll klasse maar dat hoeft niet omdat het bestand in een andere submap staat dan de bll met de zelfde naam. Op de pagina Een klassenbestand toevoegen aan een project lees je hoe je een klassenbestand aan je project toevoegt.
- We declareren de gebruikte namespaces. De klasse zetten we in de namespace
FricFrac.
Dal
en implementeert deIDal
interface. De instantie van de Bll wordt buiten de klasse aangemaakt en als parameter meegegeven. Dat is een artisanale manier om Depency Injection te implementeren. In de constructor halen we de elementen van de connectiestring op en creëren we de connectiestring op basis daarvan:using Microsoft.Extensions.Configuration; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.IO; namespace FricFrac.Dal { class EventCategory : Dal.IDal<Bll.EventCategory> { private string connectionString; private string message; public string Message { get { return message; } set { message = value; } } public EventCategory() { // Lees de connectiestring in // later gebruiken hiervoor dependancy injection var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); IConfiguration configuration = builder.Build(); connectionString = string.Format("server={0};user id={1};password={2};port={3};database={4};SslMode={5};", configuration["connection:server"], configuration["connection:userid"], configuration["connection:password"], configuration["connection:port"], configuration["connection:database"], configuration["connection:SslMode"]); } } }
- DAL ReadAll of SelectAll methode: soms gebruiken we
SelectAll
als naam voor de methode. Als we de CRUD terminologie volgen gebruiken we de naamReadAll.
- DAL ReadOne of SelectOne methode: soms gebruiken we
SelectOne
als naam voor de methode. Als we de CRUD terminologie volgen gebruiken we de naamReadOne
. - DAL Create of Insert methode: Soms gebruiken we
Insert
als naam voor de methode. Als we de CRUD terminologie volgen gebruiken we de naamCreate
. - DAL Update methode
- DAL Delete methode
- We hebben al die methoden gemaakt in Visual Studio. Tijd om alles te pushen naar Bitbucket en dan naar Cloud9 te pullen en zien of daar alles ook werkt:
- we gaan naar Powershell
- checken met
git status
wat er allemaal gewijzigd is - we merken dat er VS nieuwe bestanden heeft gemaakt die we niet in de repo willen, dus wijzigen we het .gitignore bestand:
- met git
rm -rf --cached .
activeren we het nieuwe .gitignore bestand (VS verzameld automatisch bestanden) - opnieuw
git status
- verzamel de bestanden met
git add --all
- De bestanden neerleggen met
git commit -m "DAL klasse EventCategory toegevoegd"
git push -u origin master
- checken met
- in de terminal van Cloud9:
- ga naar de root van de workspace
git pull origin master
- ga naar:
cd dotnetcore/adodotnet/adodotnet
dotnet run
- we gaan naar Powershell
- Met dit als reultaat:
2017-09-15 19:16:43